#!/usr/bin/env python
from waflib import Utils
import sys
host_os = sys.platform

bld.SAMBA_BINARY('nsstest',
		 source='nsstest.c',
		 deps='replace dl',
                 for_selftest=True
		 )

if bld.CONFIG_SET('HAVE_PTHREAD'):
    bld.SAMBA_BINARY('stress-nss-libwbclient',
		     source='stress-nss-libwbclient.c',
		     deps='wbclient pthread',
		     for_selftest=True
		     )
    bld.SAMBA_BINARY('b15464-testcase',
		     source='b15464-testcase.c',
		     deps='replace pthread dl',
		     for_selftest=True
		     )

# The nss_wrapper code relies strictly on the linux implementation and
# name, so compile but do not install a copy under this name.
bld.SAMBA_PLUGIN('nss_wrapper_winbind',
		  cflags='-D_PUBLIC_ON_LINUX_=_PUBLIC_',
		  source='winbind_nss_linux.c',
		  deps='wbclient',
		  realname='libnss_wrapper_winbind.so.2',
		  install=False,
		  vnum='2')

# FIXME: original was *linux* | gnu* | k*bsd*-gnu | kopensolaris*-gnu)
# the search for .rfind('gnu') covers gnu* and *-gnu is that too broad?

if (Utils.unversioned_sys_platform() == 'linux' or (host_os.rfind('gnu') > -1)):
    bld.SAMBA_PLUGIN('nss_winbind',
              keep_underscore=True,
              cflags='-D_PUBLIC_ON_LINUX_=_PUBLIC_',
              source='winbind_nss_linux.c',
              deps='wbclient',
              realname='libnss_winbind.so.2',
              soname='libnss_winbind.so.2',
              vnum='2')

    bld.SAMBA3_PLUGIN('nss_wins',
                      keep_underscore=True,
                      cflags='-D_PUBLIC_ON_LINUX_=_PUBLIC_',
                      source='wins.c',
                      deps='wbclient replace',
                      realname='libnss_wins.so.2',
                      soname='libnss_wins.so.2',
                      vnum='2')
elif (host_os.rfind('freebsd') > -1):
	# FreeBSD winbind client is implemented as a wrapper around
	# the Linux version.
	bld.SAMBA_PLUGIN('nss_winbind',
			  source='winbind_nss_linux.c winbind_nss_freebsd.c',
			  deps='wbclient',
			  realname='nss_winbind.so.1',
			  vnum='1')

	bld.SAMBA3_PLUGIN('nss_wins',
			  source='wins.c wins_freebsd.c',
			  deps='''wbclient''',
			  realname='nss_wins.so.1',
			  vnum='1')

elif (host_os.rfind('netbsd') > -1):
	# NetBSD winbind client is implemented as a wrapper
	# around the Linux version. It needs getpwent_r() to
	# indicate libc's use of the correct nsdispatch API.

	if bld.CONFIG_SET("HAVE_GETPWENT_R"):
		bld.SAMBA_PLUGIN('nss_winbind',
				  source='winbind_nss_linux.c winbind_nss_netbsd.c',
				  deps='wbclient',
				  realname='libnss_winbind.so')
elif Utils.unversioned_sys_platform() == 'sunos':
	bld.SAMBA_PLUGIN('nss_winbind',
			  source='winbind_nss_solaris.c winbind_nss_linux.c',
			  deps='wbclient',
			  realname='nss_winbind.so.1',
			  vnum='1')
elif (host_os.rfind('hpux') > -1):
	bld.SAMBA_PLUGIN('nss_winbind',
			  source='winbind_nss_linux.c',
			  deps='wbclient',
			  realname='libnss_winbind.so')
elif (host_os.rfind('aix') > -1):
	bld.SAMBA_PLUGIN('nss_winbind',
			  source='winbind_nss_aix.c',
			  deps='wbclient',
			  realname='WINBIND')

if bld.CONFIG_SET('WITH_PAM_MODULES') and bld.CONFIG_SET('HAVE_PAM_START'):
	bld.SAMBA_PLUGIN('pamwinbind',
		source='pam_winbind.c',
		deps='talloc wbclient tiniparser pam samba_intl',
		cflags='-DLOCALEDIR=\"%s/locale\"' % bld.env.DATADIR,
		realname='pam_winbind.so',
		install_path='${PAMMODULESDIR}'
		)

if bld.CONFIG_GET("USING_SYSTEM_KRB5"):
    # If we build locator plugins for a
    # system library we should use builtin
    # linking of our own subsystems,
    # while we may link to the system
    # krb5 libraries.
    winbind_krb5_require_builtin_deps = True
else:
    # If we build locator plugins for our own heimdal
    # version we don't want to do builtin linking.
    # As we're already using private libraries
    # it's not a problem...
    winbind_krb5_require_builtin_deps = False

if bld.CONFIG_SET('HAVE_KRB5_LOCATE_PLUGIN_H'):
    bld.SAMBA_PLUGIN('winbind_krb5_locator',
                     source='krb5_plugin/winbind_krb5_locator.c',
                     deps='wbclient krb5 com_err',
                     require_builtin_deps=winbind_krb5_require_builtin_deps,
                     realname='winbind_krb5_locator.so',
                     install_path='${MODULESDIR}/krb5')

if bld.CONFIG_SET('HAVE_KRB5_LOCATE_PLUGIN_H'):
    # libkrb5.so scans it's plugin directories for files
    # and calls dlopen()/dlsym() on them. The actual path
    # depends on MIT vs. Heimdal.
    #
    # The async_dns_krb5_locator don't use winbind,
    # instead it uses almost all of samba directly,
    # which means everything will be injected
    # into all processes using the libkrb5.so.
    #
    # See https://bugzilla.samba.org/show_bug.cgi?id=14780
    # why this is a bad idea.
    #
    # We install this plugin (and also the other krb5 plugins)
    # under Samba's MODULESDIR, it's not available to
    # libkrb5.so by default.
    #
    # Packagers should leave it that way and allow admins
    # to create symlinks for the plugins they actually want
    # to be used.
    bld.SAMBA_PLUGIN('async_dns_krb5_locator',
                     source='krb5_plugin/async_dns_krb5_locator.c',
                     deps='''
                     talloc
                     addns
                     samba_intl
                     libsmb
                     smbconf
                     KRBCLIENT
                     smbd_base
                     krb5
                     com_err
                     ''',
                     require_builtin_deps=False,
                     realname='async_dns_krb5_locator.so',
                     install_path='${MODULESDIR}/krb5')

if bld.CONFIG_SET('HAVE_KRB5_LOCALAUTH_PLUGIN_H'):
    bld.SAMBA_PLUGIN('winbind_krb5_localauth',
                     source='krb5_plugin/winbind_krb5_localauth.c',
                     deps='wbclient krb5 com_err',
                     require_builtin_deps=winbind_krb5_require_builtin_deps,
                     realname='winbind_krb5_localauth.so',
                     install_path='${MODULESDIR}/krb5')

bld.SAMBA_SUBSYSTEM('WB_REQTRANS',
	source='wb_reqtrans.c',
	deps='talloc tevent LIBASYNC_REQ'
	)

bld.SAMBA_BINARY('wbinfo',
	source='wbinfo.c',
	deps='samba-util LIBCLI_AUTH popt cmdline wbclient LIBAFS_SETTOKEN'
	)
